﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using turnos.core.modelo;
using turnos.core.util;
using Reportman.Reporting;
using Reportman.Drawing.Forms;

namespace turnos.escritorio
{
    public partial class frmAMSolicitante : Form
    {
        private Solicitantes _solicitante;
        private AgendaDeTurnos _agenda;
        private bool _cargaFecha;

        public bool CargaFecha
        {
            get { return _cargaFecha; }
            set { _cargaFecha = value; }

        }

        public Solicitantes SolicitanteActual
        {
            get
            {
                if (_solicitante == null)
                    _solicitante = new Solicitantes();
                return _solicitante;
            }
            set { _solicitante = value; }

        }

        public AgendaDeTurnos AgendaSeleccionada
        {
            get
            {
                if (_agenda == null)
                    _agenda = new AgendaDeTurnos();
                return _agenda;
            }
            set { _agenda = value; }
        }

        public frmAMSolicitante()
        {
            InitializeComponent();
        }

        private void frmAMSolicitante_Load(object sender, EventArgs e)
        {
            cargarCobmos();
            inicializar();

        }

        private void inicializar()
        {
            if (AgendaSeleccionada.RefSolicitante == null)
            {
                txtNroDocumento.Focus();
                dtpFechaProxVencimiento.Enabled = false;
            }
            else
            {
                SolicitanteActual = Modelo.TurnosModelo.TurnosC.TraerSolicitantePorId(AgendaSeleccionada.RefSolicitante.Value);
                cbTipoDocumento.SelectedValue = SolicitanteActual.RefTipoDocumento;
                txtNroDocumento.Text = SolicitanteActual.NroDocumento.ToString();
                //cbSexo.SelectedValue = int.Parse(SolicitanteActual.Sexo);
                txtApellido.Text = SolicitanteActual.ApeyNom;
                txtEmail.Text = SolicitanteActual.Email;
                btnBuscar.Visible = false;
                dtpFechaProxVencimiento.Value = DateTime.Now.AddYears(5);
                dtpFechaProxVencimiento.Enabled = true;
                cbTipoDocumento.Enabled = false;
                txtNroDocumento.Enabled = false;
                cbSexo.Enabled = false;
            }
        }

        private void cargarCobmos()
        {
            cbSexo.Items.Add("Masculino");
            cbSexo.Items.Add("Femenino");
            cbSexo.SelectedIndex = 0;

            cbTipoDocumento.DataSource = Modelo.TurnosModelo.TurnosC.TraerTiposDocumentos(null);
            cbTipoDocumento.ValueMember = "IdTipoDocumento";
            cbTipoDocumento.DisplayMember = "TipoDocumento";

            cbTipoTramite.DataSource = Modelo.TurnosModelo.TurnosC.TraerTiposTramites(null);
            cbTipoTramite.ValueMember = "IdTipoTramite";
            cbTipoTramite.DisplayMember = "TipoTramite1";

        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                SolicitanteActual = Modelo.TurnosModelo.TurnosC.TraerSolicitante(cbTipoDocumento.SelectedValue.ToString(), txtNroDocumento.Text, cbSexo.SelectedIndex);
                if (SolicitanteActual.IdSolicitante != 0)
                {
                    txtApellido.Text = SolicitanteActual.ApeyNom;
                    txtEmail.Text = SolicitanteActual.Email;
                    if (SolicitanteActual.FechaProxVenc.HasValue)
                        dtpFechaProxVencimiento.Value = SolicitanteActual.FechaProxVenc.Value;
                    else
                        dtpFechaProxVencimiento.Visible = false;

                }
                txtApellido.Enabled = true;
                txtEmail.Enabled = true;
                txtApellido.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al buscar un solicitante", "Error");
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (CargaFecha)
                {
                    Modelo.TurnosModelo.FinalizarAgenda(AgendaSeleccionada, SolicitanteActual, dtpFechaProxVencimiento.Value, Modelo.TurnosModelo.Usuario.Usuario);
                }
                else
                {
                    SolicitanteActual.RefTipoDocumento = byte.Parse(cbTipoDocumento.SelectedValue.ToString());
                    SolicitanteActual.NroDocumento = int.Parse(txtNroDocumento.Text);
                    SolicitanteActual.Sexo = cbSexo.SelectedIndex == 0 ? "M" : "F";
                    SolicitanteActual.ApeyNom = txtApellido.Text;

                    SolicitanteActual.Email = txtEmail.Text;

                    AgendaSeleccionada.RefTipoTramite = int.Parse(cbTipoTramite.SelectedValue.ToString());

                    Modelo.TurnosModelo.TurnosC.GuardarSolicitante(SolicitanteActual, AgendaSeleccionada, Modelo.TurnosModelo.Usuario.Usuario, true);

                    imprimir(AgendaSeleccionada.IdTurno);
                }
                MessageBox.Show("Se guardo el solicitante correctamente", "Confirmación");
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas al guardar el solicitante " + ex.Message, "Error");
            }
        }

        private void imprimir(int id)
        {
            Report rp = new Reportman.Reporting.Report();
            rp.LoadFromFile("comprobante.rep");

            rp.DatabaseInfo[0].ProviderFactory = "System.Data.SqlClient";
            rp.DatabaseInfo[0].ConnectionString = @"Data Source=.\Sql2008; Initial Catalog=Turnos;Integrated Security=SSPI";
            rp.Params[0].Value = id;
            PrintOutWinForms prw = new PrintOutWinForms();
            prw.Preview = true;
            prw.Print(rp.MetaFile);
        }



        private void deshabilita()
        {
            txtApellido.Text = "";
            txtApellido.Enabled = false;
            txtEmail.Text = "";
            txtEmail.Enabled = false;
        }

        private void txtNroDocumento_TextChanged(object sender, EventArgs e)
        {
            deshabilita();
        }

        private void cbSexo_SelectedIndexChanged(object sender, EventArgs e)
        {
            deshabilita();
        }

        private void cbTipoDocumento_SelectedIndexChanged(object sender, EventArgs e)
        {
            deshabilita();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }


    }
}


